﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InnvoiceActual.Logica.GestorObject;
using InnvoiceActual.BaseDeDatos.innvoicedbDataSetTableAdapters;
using MySql.Data.MySqlClient;
using System.Windows;
using System.Data;
using InnvoiceActual.Logica.GestorObject.Remito;

namespace InnvoiceActual.Logica.GestorDB.RemitoDB
{
    public class ConfigRemitoDB
    {
        #region Property

        EmpresaCS empresa = EmpresaCS.Instance;

        #endregion

        #region CRUD Methods

        public ConfigRemito GetConfigRemito(int codigo)
        {
            ConfigRemito resultado = new ConfigRemito();

            config_remitoTableAdapter configRemitoTB = new config_remitoTableAdapter();

            int codigoEmpresa = empresa.CodigoEmpresa;

            configRemitoTB.Connection.Open();
            MySqlTransaction transaccion = configRemitoTB.Connection.BeginTransaction();

            try
            {
                DataTable resultadoConsulta = configRemitoTB.GetDataByConfigRemitoSegunCodigos(codigoEmpresa, codigo);

                if (resultadoConsulta.Rows.Count > 0)
                {
                    foreach (DataRow item in resultadoConsulta.Rows)
                    {
                        resultado.CodigoEmpresa = Convert.ToInt16(item["codigo_empresa"].ToString());
                        resultado.CodigoTipo = Convert.ToInt16(item["codigoTipo"].ToString());
                        resultado.Tipo = item["tipo"].ToString();
                        resultado.Numeracion = Convert.ToInt16(item["num"].ToString());
                        resultado.Descripcion = item["descripcion"].ToString();
                        resultado.Impresora = item["impresora"].ToString();
                        resultado.Renglones = Convert.ToInt16(item["renglones"].ToString());
                        resultado.Copias = Convert.ToInt16(item["copias"].ToString());
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + " Error -- Class ConfigRemitoDB -- Methods GetConfigRemito(int codigo)", "Cuidado", MessageBoxButton.OK);
                transaccion.Rollback();
            }
            finally
            {
                configRemitoTB.Connection.Close();
            }

            return resultado;
        }

        #endregion

        #region Auxiliar Methods

        public int GetNumeracionDeConfigRemito(int codigoTipo)
        {
            config_remitoTableAdapter configRemitoTB = new config_remitoTableAdapter();

            int resultado = 0;

            configRemitoTB.Connection.Open();
            MySqlTransaction transaccion = configRemitoTB.Connection.BeginTransaction();

            int codigoEmpresa = empresa.CodigoEmpresa;

            try
            {
                DataTable resultadoConsulta = configRemitoTB.GetDataByConfigRemitoSegunCodigos(codigoEmpresa, codigoTipo);

                if (resultadoConsulta.Rows.Count > 0)
                {
                    foreach (DataRow item in resultadoConsulta.Rows)
                    {
                        resultado = Convert.ToInt16(item["num"].ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + " Error -- Class ConfigRemitoDB -- Methods GetNumeracionDeConfigRemito(int codigoTipo)", "Cuidado", MessageBoxButton.OK);
                transaccion.Rollback();
            }
            finally
            {
                configRemitoTB.Connection.Close();
            }

            return resultado;
        }

        public void IncrementarNumeracionDeRemito(int codigoRemito, int nuevaNumeracion)
        {
            int codigoEmpresa = empresa.CodigoEmpresa;

            int resultadoConsulta = 0;

            config_remitoTableAdapter configRemitoTB = new config_remitoTableAdapter();

            configRemitoTB.Connection.Open();
            MySqlTransaction transaccion = configRemitoTB.Connection.BeginTransaction();

            try
            {
                ConfigRemito auxiliar = GetConfigRemito(codigoRemito);
                resultadoConsulta = configRemitoTB.UpdateNumeracionDeTipoRemito(nuevaNumeracion, auxiliar.CodigoEmpresa, auxiliar.CodigoTipo);
                transaccion.Commit();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + " Error -- Class ConfigRemitoDB -- Methods IncrementarNumeracionDeRemito(int codigoRemito)", "Cuidado", MessageBoxButton.OK);
                transaccion.Rollback();
            }
            finally
            {
                configRemitoTB.Connection.Close();
            }

        }

        #endregion
    }
}
